#ifndef _MAIN_H
#define _MAIN_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include "lv_conf.h"
#include <sys/time.h>
#include <sdl/sdl.h>
#include "lvgl/lvgl.h"
#include "lv_drivers/display/fbdev.h"
#include "lv_drivers/indev/evdev.h"
#include <sys/time.h>
#include <unistd.h>
#include <pthread.h>
#include <ui.h>
#include <demos/lv_demos.h>
#include <time.h>
#include <stdbool.h>


#define SPEED_MAX 240
#define SPEED_MIN 0

#define NORMAL_PRESSURE_MIN 210
#define NORMAL_PRESSURE_MAX 230
#define NORMAL_TEMP_MIN 90
#define NORMAL_TEMP_MAX 110

#define REV_SPEED_MAX 8000
#define REV_SPEED_MIN 0

// 油耗指针参数配置
#define FUEL_CONSUMPTION_MIN 0.0f   // 最低油耗值(L/100km)
#define FUEL_CONSUMPTION_MAX 1.0f    // 最高油耗值(L/100km)
#define FUEL_MIN_ANGLE -950.0f       // 最小角度(对应最高油耗1.0)
#define FUEL_MAX_ANGLE -75.0f        // 最大角度(对应最低油耗0.0)
#define FUEL_ANGLE_RANGE 875.0f      // 角度范围(-75 - (-950))
#define ANGLE_PER_STEP 52.0f         // 每0.1油耗变化对应的角度变化
#define STEP_ANIM_TIME 500           // 单步动画时间(ms)


// 数据变量定义
int yb_speed;         // 速度
int yb_rev_speed;     // 转速度
int yb_water_tem;     // 冷却液温度
int yb_tem;           // 温度
int yb_zq_ty;         // 左前胎压
int yb_zh_ty;         // 左后胎压
int yb_yq_ty;         // 右前胎压
int yb_yh_ty;         // 右后胎压
int yb_zq_tem;        // 左前温度
int yb_zh_tem;        // 左后温度
int yb_yq_tem;        // 右前温度
int yb_yh_tem;        // 右后温度
int yb_xingshilic;    // 行驶里程
int yb_leijilic;      // 累计里程
int yb_zonglic;       // 总里程
int yb_xstime;        // 行驶时间
int yb_ljtime;        // 累计时间
extern float yb_xingshiyouhao; // 行驶油量
int yb_leijiyouhao;   // 累计油量
float youhao;          // 油耗(L/100km)
bool yb_Pd;           // P档
bool yb_Rd;           // R档
bool yb_Nd;           // N档
bool yb_Dd;           // D档
bool yb_Sd;           // S档
bool yb_ptmode;       // 普通模式
bool yb_hbmode;       // 环保模式
bool yb_jsmode;       // 竞速模式
bool yb_yejianmode;   // 夜间模式
bool yb_zhinengmode;  // 智能模式
bool yb_zq_ty_jb;     // 左前胎压警报
bool yb_zh_ty_jb;     // 左后胎压警报
bool yb_yq_ty_jb;     // 右前胎压警报
bool yb_yh_ty_jb;     // 右后胎压警报
bool yb_zq_ldxh;      // 左前雷达信号
bool yb_zh_ldxh;      // 左后雷达信号
bool yb_yq_ldxh;      // 右前雷达信号
bool yb_yh_ldxh;      // 右后雷达信号
bool yb_yeshi_system; // 夜视系统
bool yb_ld_system;    // 雷达系统
bool yb_zny_system;   // 智能眼系统
bool yb_jiashizong;   // 驾驶中标识

// 主页面顶部标识指示灯
bool yb_cmzs_led;            // 车门打开指示灯
bool yb_aqdjb_led;           // 安全带未系警报指示灯
bool yb_qwz_led;             // 前位置灯指示灯
bool yb_hwz_led;             // 后位置灯指示灯
bool yb_shache_led;          // 刹车指示灯
bool yb_fadongji_led;        // 发动机指示灯
bool yb_youya_led;           // 油压指示灯
bool yb_shuangshan_led;      // 双闪指示灯
bool yb_aqqn_led;            // 安全气囊打开指示灯
bool yb_jinguang_led;        // 近光灯指示灯
bool yb_yuanguang_led;       // 远光灯指示灯
bool yb_qianwu_led;          // 前雾灯指示灯
bool yb_houwu_led;           // 后雾灯指示灯
bool yb_abs_led;             // ABS指示灯
bool yb_eco_led;             // 环保模式eco指示灯
bool yb_zhidong_led;         // 驻车指示灯
bool yb_weixianjingbao_led;  // 危险警报指示灯
bool yb_qianchegai_led;      // 前车盖打开指示灯
bool yb_houchegai_led;       // 后车盖打开指示灯
bool yb_yugua_led;           // 雨刮指示灯
bool yb_xiansu_led;          // 限速指示灯
bool yb_youliangjinggao_led; // 油量警告指示灯
bool yb_cardianchi_led;      // 车辆电源指示灯
bool yb_carganying_led;      // 车辆感应指示灯
bool yb_carxinhao_led;       // 车辆信号指示灯
bool yb_carlengqueye_led;    // 车辆冷却液指示灯
bool yb_carzitai_led;        // 车辆姿态指示灯
bool yb_carlianwang_led;     // 车联网指示灯
bool yb_zidongjiashi_led;    // 自动驾驶指示灯
bool yb_chaosutixing_led;    // 超速提醒指示灯
bool yb_daolufuzu_led;       // 道路辅助指示灯
bool yb_taiyajinggao_led;    // 胎压警告指示灯
bool yb_anquanjingbao_led;   // 安全警报指示灯
bool yb_del_btn;     // 删除按钮


char new_mode[15];     // 新模式
char new_danwei[10];   // 新档位
int new_speed;         // 新速度
int new_rev_speed;     // 新转速度
int new_water_tem;     // 新冷却液温度
int new_tem;           // 新温度
int new_zq_ty;         // 新左前胎压
int new_zh_ty;         // 新左后胎压
int new_yq_ty;         // 新右前胎压
int new_yh_ty;         // 新右后胎压
int new_zq_tem;        // 新左前温度
int new_zh_tem;        // 新左后温度
int new_yq_tem;        // 新右前温度
int new_yh_tem;        // 新右后温度
int new_xingshilic;    // 新行驶里程
int new_leijilic;      // 新累计里程
int new_zonglic;        // 新总里程
int new_xingshitime;   // 新行驶时间
int new_leijitime;     // 新累计时间
extern float new_xingshiyouhao; // 新行驶油量
int new_leijiyouhao;   // 新累计油量
bool new_Pd;           // 新P档
bool new_Rd;           // 新R档
bool new_Nd;           // 新N档
bool new_Dd;           // 新D档
bool new_Sd;           // 新S档
bool new_ptmode;       // 新普通模式
bool new_hbmode;       // 新环保模式
bool new_jsmode;       // 新竞速模式
bool new_yejianmode;   // 新夜间模式
bool new_zhinengmode;  // 新智能模式
bool new_zq_ty_jb;     // 新左前胎压报警
bool new_zh_ty_jb;     // 新左后胎压报警
bool new_yq_ty_jb;     // 新右前胎压报警
bool new_yh_ty_jb;     // 新右后胎压报警
bool new_zq_ldxh;      // 左前雷达信号
bool new_zh_ldxh;      // 左后雷达信号
bool new_yq_ldxh;      // 右前雷达信号
bool new_yh_ldxh;      // 右后雷达信号
bool new_yeshi_system; // 新夜视系统
bool new_ld_system;    // 新雷达系统
bool new_zny_system;   // 新智能眼系统
bool new_jiashizong;   // 新驾驶中标识

// 新主页面顶部标识指示灯
bool new_cmzs_led;            // 新车门打开指示灯
bool new_aqdjb_led;           // 新安全带未系警报指示灯
bool new_qwz_led;             // 新前位置灯指示灯
bool new_hwz_led;             // 新后位置灯指示灯
bool new_shache_led;          // 新刹车指示灯
bool new_fadongji_led;        // 新发动机指示灯
bool new_youya_led;           // 新油压指示灯
bool new_shuangshan_led;      // 新双闪指示灯
bool new_aqqn_led;            // 新安全气囊打开指示灯
bool new_jinguang_led;        // 新近光灯指示灯
bool new_yuanguang_led;       // 新远光灯指示灯
bool new_qianwu_led;          // 新前雾灯指示灯
bool new_houwu_led;           // 新后雾灯指示灯
bool new_abs_led;             // 新ABS指示灯
bool new_eco_led;             // 新环保模式eco指示灯
bool new_zhidong_led;         // 新驻车指示灯
bool new_weixianjingbao_led;  // 新危险警报指示灯
bool new_qianchegai_led;      // 新前车盖打开指示灯
bool new_houchegai_led;       // 新后车盖打开指示灯
bool new_yugua_led;           // 新雨刮指示灯
bool new_xiansu_led;          // 新限速指示灯
bool new_youliangjinggao_led; // 新油量警告指示灯
bool new_cardianchi_led;      // 新车辆电源指示灯
bool new_carganying_led;      // 新车辆感应指示灯
bool new_carxinhao_led;       // 新车辆信号指示灯
bool new_carlengqueye_led;    // 新车辆冷却液指示灯
bool new_carzitai_led;        // 新车辆姿态指示灯
bool new_carlianwang_led;     // 新车联网指示灯
bool new_zidongjiashi_led;    // 新自动驾驶指示灯
bool new_chaosutixing_led;    // 新超速提醒指示灯
bool new_daolufuzu_led;       // 新道路辅助指示灯
bool new_taiyajinggao_led;    // 新胎压警告指示灯
bool new_anquanjingbao_led;   // 新安全警报指示灯

struct IndicatorMap {
    const char *name;
    bool *var;
};

typedef enum {
    GEAR_P, // P档
    GEAR_R, // R档
    GEAR_N, // N档
    GEAR_D, // D档
    GEAR_S  // S档（运动挡）
} Gear;

// 模式定义
typedef enum {
    MODE_NORMAL, // 普通模式
    MODE_ECO,    // 环保模式
    MODE_SPORT,  // 竞速模式
    MODE_NIGHT,  // 夜间模式
    MODE_SMART   // 智能模式
} DriveMode;

void seechange(void);
void *iu_main(void *arg);
void init_input_output();
void roller_event_handler(lv_event_t *e);
extern Gear current_gear; // 当前档位
extern const char *gear_names[];
extern lv_obj_t *gear_ui_objects[5];
extern void handle_gear_change(Gear new_gear);
void check_all_tires(void);

bool update_tire_status(int pressure, int temperature, 
                       lv_obj_t *ty_box, lv_obj_t *jg_box,
                       lv_obj_t *ty_label, lv_obj_t *temp_label,
                    lv_obj_t *ty_status_label, lv_obj_t *temp_status_label);

extern int current_speed_angle;

// 速度指针控制
void update_speed_pointer(int new_speed);
static void anim_ready_cb(lv_anim_t * a);

// 转速度指针控制
void update_revspeed_pointer(int new_revspeed);
static void rev_anim_ready_cb(lv_anim_t * a);

// 冷却液温度指针控制
void update_coolant_temp(int new_temp);
static void coolant_anim_ready_cb(lv_anim_t * a);

// 油耗指针控制
void update_fuel_consumption(float new_consumption);
static void fuel_anim_step_cb(lv_anim_t *a);
static void update_fuel_consumption_step(float next_angle);
void init_fuel_pointer();

// 左转向灯控制标志
extern bool left_turn_signal_on;
void toggle_left_turn_signal(bool enable);

// 右转向灯状态变量
extern bool right_turn_signal_on;
extern bool is_right_signal_animating;
void toggle_right_turn_signal(bool enable);

// 双闪状态变量
extern bool hazard_lights_on;
void toggle_hazard_lights(bool enable);  // 双闪控制函数

#endif /* _MAIN_H */